// ----------------------------------
// RSDK Project: Sonic 1/Sonic 2
// Script Description: RedRing Object
// Script Author: Christan Whitehead/Simon Thomley
// Unpacked by Rubberduckycooly's script unpacker
// ----------------------------------

//-------Aliases-------//
private alias object.value0 : lavitate.value
private alias object.value1 : object.timer
private alias object.value2 : isCollected
private alias object.value3 : frame.timer

// Function declarations
reserve function RedRing_DebugDraw
reserve function RedRing_DebugSpawn

// Static Values

// Tables

function RedRing_DebugDraw
	DrawSprite(0)
end function


function RedRing_DebugSpawn
	CreateTempObject(TypeName[Red Ring], 0, object.xpos, object.ypos)
	object[tempObjectPos].drawOrder = 4
end function


event ObjectMain
	if options.gamemode == 1
		object.type = 0
	end if

	switch object.state
	case 0 //startup
		if object.propertyValue != 0
			arrayPos1 = 500
			temp4 = stage.ListPos
			arrayPos1 += temp4
			temp0 = object.propertyValue
			temp0 --
			GetBit(isCollected, RedRing.tempData, temp0)
		endif
		object.state ++
		break
	case 1 //idle
		frame.timer ++
		foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
			BoxCollisionTest(C_TOUCH, object.entityPos, -14, -14, 14, 14, currentPlayer, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO)
			if checkResult == 1
				if object.propertyValue != 0
					arrayPos1 = 500
					temp4 = stage.ListPos
					arrayPos1 += temp4
					temp0 = object.propertyValue
					temp0 --
					SetBit(RedRing.tempData, temp0, 1)
					saveRAM[arrayPos1] = RedRing.tempData
					isCollected = 1
					arrayPos1 += 1
				endif
				object.state ++
				if debug.used == 0
					WriteSaveRAM()
				end if
				PlaySfx(SfxName[Red Ring], 0)
			end if
		next
		break
	case 2 // activate
		frame.timer += 2
		lavitate.value -= 0x10000
		object.timer++
		if object.timer > 29
			object.timer = 0
			object.state++
		endif
		break
	case 3 //dissapearing
		frame.timer += 2
		object.timer++
		object.scale -= 4
		if object.timer > 29
			object.timer = 0
			temp0 = object.ypos
			temp0 += lavitate.value
			temp0 -= 0xA0000
			CreateTempObject(TypeName[Ring Sparkle], 0, object.xpos, temp0)
			object.state++
			
		endif
		break
	case 4 //delete
		object.type = 0
		break
	endswitch

end event


event ObjectDraw
	object.inkEffect = INK_ALPHA
	if frame.timer > 4
		object.frame ++
		switch isCollected
		case 0
			object.alpha = 255
			if object.Frame > 7
				object.Frame = 0
			endif
			break
		case 1
			object.alpha = 100
			if object.Frame > 15
				object.Frame = 8
			endif
			if object.Frame < 8
				object.Frame = 8
			endif
			break
		endswitch
		frame.timer = 0
	endif
	if object.state < 4
		temp0 = object.ypos
		temp0 += lavitate.value
		DrawSpriteFX(object.Frame, FX_INK, object.xpos, temp0)
	endif
end event


event ObjectStartup
	ReadSaveRAM()
	arrayPos1 = 500
	temp4 = stage.ListPos
	arrayPos1 += temp4
	RedRing.tempData = saveRAM[arrayPos1]
	LoadSpriteSheet("Global/Items4.gif")
	foreach (TypeName[Red Ring], arrayPos0, ALL_ENTITIES)
		object[arrayPos0].drawOrder = 4
	next

	SpriteFrame(-14, -14, 28, 28, 1, 1)
	SpriteFrame(-14, -14, 28, 28, 1, 30)
	SpriteFrame(-14, -14, 28, 28, 1, 59)
	SpriteFrame(-14, -14, 28, 28, 1, 88)
	SpriteFrame(-14, -14, 28, 28, 1, 117)
	SpriteFrame(-14, -14, 28, 28, 1, 146)
	SpriteFrame(-14, -14, 28, 28, 1, 175)
	SpriteFrame(-14, -14, 28, 28, 1, 204)

	SpriteFrame(-14, -14, 28, 28, 30, 1)
	SpriteFrame(-14, -14, 28, 28, 30, 30)
	SpriteFrame(-14, -14, 28, 28, 30, 59)
	SpriteFrame(-14, -14, 28, 28, 30, 88)
	SpriteFrame(-14, -14, 28, 28, 30, 117)
	SpriteFrame(-14, -14, 28, 28, 30, 146)
	SpriteFrame(-14, -14, 28, 28, 30, 175)
	SpriteFrame(-14, -14, 28, 28, 30, 204)

	SetTableValue(TypeName[Red Ring], DebugMode_ObjCount, DebugMode_TypesTable)
	SetTableValue(RedRing_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)
	SetTableValue(RedRing_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)
	DebugMode_ObjCount++
end event

event RSDKDraw
	DrawSprite(0)
end event

event RSDKLoad
	LoadSpriteSheet("Global/Items.gif")
	SpriteFrame(-8,-8,16,16,1,1)
end event
